Перейти к основному содержимому

7.04. Справочник по Prometheus

Разработчику Архитектору Инженеру

Справочник по Prometheus

Prometheus — это система мониторинга и база данных временных рядов с открытым исходным кодом, ориентированная на надёжность, масштабируемость и гибкость. Она предоставляет мощный язык запросов PromQL, поддерживает многомерную модель данных и включает встроенные механизмы алертинга и обнаружения целей. Ниже приведён подробный справочник по всем ключевым элементам Prometheus: конфигурации, метрикам, функциям, параметрам, типам данных и настройкам.


Модель данных

Prometheus хранит все данные как временные ряды. Каждый временной ряд состоит из:

  • Метрического имени — основной идентификатор, например http_requests_total.
  • Набора меток (labels) — пар «ключ=значение», добавляющих измерения к метрике, например method="POST", status="200".

Полное имя временного ряда формируется как метрика{метка1="значение1", метка2="значение2"}.

Пример:

http_requests_total{method="POST", handler="/api/v1", status="200"}

Метки позволяют фильтровать, группировать и агрегировать данные по произвольным измерениям.


Типы метрик

Prometheus поддерживает четыре основных типа метрик, определяемых на стороне экспортера или приложения:

Counter (счётчик)

  • Представляет монотонно возрастающее значение.
  • Используется для подсчёта количества событий: запросов, ошибок, завершённых задач.
  • Пример: http_requests_total, errors_total.

Gauge (измеритель)

  • Представляет значение, которое может произвольно расти и уменьшаться.
  • Используется для измерения текущего состояния: температуры, использования памяти, числа активных соединений.
  • Пример: memory_usage_bytes, current_connections.

Histogram (гистограмма)

  • Измеряет распределение значений (например, времени ответа).
  • Автоматически создаёт несколько временных рядов:
    • _bucket{le="значение"} — количество наблюдений ≤ указанного значения.
    • _count — общее число наблюдений.
    • _sum — сумма всех наблюдений.
  • Пример: http_request_duration_seconds_bucket{le="0.5"}.

Summary (сводка)

  • Похож на гистограмму, но вычисляет квантили на стороне клиента.
  • Создаёт временные ряды:
    • _quantile{φ="0.95"} — значение, ниже которого находится 95% наблюдений.
    • _count и _sum — аналогично гистограмме.
  • Используется реже, так как квантили не агрегируются между инстансами.

Конфигурация Prometheus

Основной файл конфигурации — prometheus.yml. Он использует формат YAML и содержит следующие корневые секции:

  • global
  • alerting
  • rule_files
  • scrape_configs
  • remote_write
  • remote_read

global

Задаёт глобальные параметры, применяемые ко всем остальным разделам.

Параметры:

  • scrape_interval: интервал по умолчанию между сборами метрик. Значение по умолчанию — 1m.
  • scrape_timeout: максимальное время ожидания ответа от цели. Значение по умолчанию — 10s.
  • evaluation_interval: интервал вычисления правил записи и алертов. Значение по умолчанию — 1m.
  • external_labels: метки, добавляемые ко всем временным рядам и алертам, отправляемым на внешние системы (например, Alertmanager или remote storage).

Пример:

global:
scrape_interval: 30s
scrape_timeout: 10s
evaluation_interval: 30s
external_labels:
monitor: "prod-cluster"

scrape_configs

Определяет цели для сбора метрик (scrape targets).

Основные параметры:

  • job_name: уникальное имя задания. Обязательное поле.
  • scrape_interval, scrape_timeout: переопределяют глобальные значения.
  • metrics_path: путь HTTP-эндпоинта, откуда берутся метрики. По умолчанию — /metrics.
  • scheme: протокол (http или https). По умолчанию — http.
  • static_configs: статический список целей.
  • file_sd_configs: динамическое обнаружение через файлы.
  • kubernetes_sd_configs, consul_sd_configs и другие: интеграции с системами обнаружения.
  • relabel_configs: преобразование меток до сохранения.
  • metric_relabel_configs: преобразование меток после получения метрик, но до сохранения в TSDB.

Пример static_configs:

scrape_configs:
- job_name: "node-exporter"
static_configs:
- targets: ["localhost:9100"]

relabel_configs

Используется для фильтрации, модификации или создания меток на основе исходных меток цели.

Доступные действия (action):

  • keep: оставить только совпадающие цели.
  • drop: исключить совпадающие цели.
  • replace: заменить значение метки (по умолчанию).
  • labelmap: скопировать метки по шаблону.
  • labeldrop, labelkeep: удалить или оставить указанные метки.

Пример:

relabel_configs:
- source_labels: [__address__]
target_label: instance
regex: "(.*):.*"
replacement: "$1"

Язык запросов PromQL

PromQL — это функциональный язык запросов, предназначенный для выборки и агрегации временных рядов.

Основные типы выражений:

  • Instant vector — набор временных рядов с одним значением на момент времени.
  • Range vector — набор временных рядов с массивом значений за интервал времени, например [5m].
  • Scalar — простое числовое значение.
  • String — строковое значение (редко используется в практике).

Агрегационные операторы

Применяются к instant vector и возвращают новый instant vector.

  • sum, min, max, avg, stddev, stdvar
  • count, count_values
  • bottomk, topk
  • quantile

Синтаксис:

<aggr-op>([parameter,] <vector-expression>) [by|without (<label list>)]

Пример:

avg(http_requests_total) by (job, instance)

Бинарные операторы

Поддерживают арифметические, сравнительные и логические операции.

Арифметика: +, -, *, /, %, ^
Сравнение: ==, !=, >, <, >=, <=
Логика: and, or, unless

Режимы объединения:

  • on(<labels>) — совпадение только по указанным меткам.
  • ignoring(<labels>) — игнорирование указанных меток при совпадении.
  • group_left, group_right — для many-to-one и one-to-many соединений.

Пример:

rate(http_requests_total[5m]) / rate(http_requests_total{status=~"5.."}[5m])

Функции

Prometheus предоставляет более 60 встроенных функций.

Временные функции:

  • time() — текущая метка времени Unix.
  • timestamp(v instant-vector) — метка времени последней точки вектора.
  • day_of_month(), day_of_week(), days_in_month(), hour(), minute(), month(), year()

Диапазонные функции (принимают range vector):

  • rate(v range-vector) — средняя скорость роста counter’а в секунду.
  • irate(v range-vector) — мгновенная скорость по двум последним точкам.
  • increase(v range-vector) — прирост counter’а за интервал.
  • delta(v range-vector) — разница между первой и последней точкой (для gauge).
  • avg_over_time, min_over_time, max_over_time, sum_over_time, count_over_time, stddev_over_time, stdvar_over_time

Функции преобразования:

  • abs(), ceil(), floor(), round(), exp(), ln(), log2(), log10(), sqrt(), pow()
  • clamp_min(v, min), clamp_max(v, max), clamp(v, min, max)
  • sgn(), sort(), sort_desc()

Функции для работы с метками:

  • label_join(v, dst, sep, src_1, src_2, ...)
  • label_replace(v, dst_label, replacement, src_label, regex)

Прочие:

  • vector(s scalar) — преобразует скаляр в instant vector без меток.
  • scalar(v instant-vector) — преобразует вектор в скаляр (если один элемент).
  • resets(v range-vector) — количество сбросов counter’а.
  • changes(v range-vector) — количество изменений gauge.
  • deriv(v range-vector) — производная временного ряда.
  • predict_linear(v range-vector, t scalar) — линейная экстраполяция на t секунд вперёд.

Правила (Rules)

Prometheus поддерживает два типа правил:

Recording rules

Создают новые временные ряды на основе выражений. Ускоряют сложные запросы.

Пример:

groups:
- name: http_rules
rules:
- record: job:http_requests:rate5m
expr: sum(rate(http_requests_total[5m])) by (job)

Alerting rules

Генерируют алерты при выполнении условий.

Пример:

- alert: HighRequestLatency
expr: job:request_latency_seconds:mean5m > 0.5
for: 10m
labels:
severity: warning
annotations:
summary: "High request latency on {{ $labels.job }}"
description: "{{ $labels.job }} has a mean latency above 0.5s for more than 10 minutes."

Ключевые поля:

  • for: длительность, в течение которой условие должно быть истинным, чтобы сработать алерт.
  • labels: метки, добавляемые к алерту.
  • annotations: информационные поля (не влияют на группировку).

Файл с правилами подключается через rule_files в основном конфиге:

rule_files:
- "rules/*.yml"

Alertmanager

Хотя Alertmanager — отдельный компонент, он тесно интегрирован с Prometheus.

Конфигурация Alertmanager определяет:

  • Группировку алертов (group_by)
  • Интервалы повторных уведомлений (repeat_interval)
  • Маршрутизацию (routes)
  • Получателей (receivers) — email, Slack, PagerDuty и др.

Prometheus отправляет алерты в Alertmanager через секцию alerting:

alerting:
alertmanagers:
- static_configs:
- targets: ["alertmanager:9093"]

Remote Storage

Prometheus может записывать и читать данные из внешних систем хранения.

remote_write

Отправка временных рядов в удалённую систему (Thanos, Cortex, VictoriaMetrics и др.).

Параметры:

  • url: адрес удалённого хранилища.
  • write_relabel_configs: фильтрация перед отправкой.
  • queue_config: настройки очереди (емкость, размер пакета, retry и т.д.).

remote_read

Чтение данных из удалённого хранилища при выполнении запросов.


HTTP API

Prometheus предоставляет RESTful API для программного доступа.

Основные эндпоинты:

  • /api/v1/query — мгновенный запрос.
  • /api/v1/query_range — диапазонный запрос.
  • /api/v1/series — поиск временных рядов по меткам.
  • /api/v1/labels — получение списка всех меток.
  • /api/v1/targets — информация о текущих целях сбора.
  • /api/v1/rules — текущие правила.
  • /api/v1/alerts — активные алерты.

Экспортёры и инструментарий

Prometheus не собирает метрики напрямую из большинства систем. Для этого используются экспортёры — промежуточные сервисы, преобразующие метрики в формат Prometheus.

Популярные экспортёры:

  • Node Exporter — метрики хоста (CPU, память, диск, сеть).
  • Blackbox Exporter — проверка доступности HTTP, TCP, ICMP.
  • MySQL Exporter, PostgreSQL Exporter — метрики СУБД.
  • cAdvisor — метрики контейнеров Docker.
  • JMX Exporter — метрики Java-приложений.

Экспортёры предоставляют HTTP-эндпоинт /metrics в текстовом формате OpenMetrics.


Формат метрик

Текстовый формат метрик прост и читаем:

# HELP http_requests_total Total number of HTTP requests
# TYPE http_requests_total counter
http_requests_total{method="POST",status="200"} 1027
http_requests_total{method="POST",status="400"} 3
  • # HELP — описание метрики.
  • # TYPE — тип метрики (counter, gauge, histogram, summary).
  • Далее — строки значений с метками.

Параметры командной строки

Prometheus запускается как бинарный исполняемый файл с множеством флагов. Большинство значений можно задать через переменные окружения или в конфигурационном файле, но некоторые доступны только через CLI.

Основные флаги

  • --config.file: путь к основному файлу конфигурации (prometheus.yml по умолчанию).
  • --web.listen-address: адрес и порт для HTTP-сервера (по умолчанию :9090).
  • --web.config.file: путь к файлу с настройками TLS/HTTP Basic Auth (для безопасного доступа к UI/API).
  • --storage.tsdb.path: директория хранения временных рядов (по умолчанию data/).
  • --storage.tsdb.retention.time: срок хранения данных (например, 15d, 2y; по умолчанию 15d).
  • --storage.tsdb.retention.size: максимальный объём данных на диске (например, 50GB; требует явного указания, не включено по умолчанию).
  • --query.max-concurrency: максимальное число одновременных запросов (по умолчанию 20).
  • --query.timeout: максимальная длительность запроса (по умолчанию 2m).
  • --log.level: уровень логирования (debug, info, warn, error; по умолчанию info).
  • --log.format: формат логов (logfmt или json; по умолчанию logfmt).

Флаги для отладки и профилирования

  • --web.enable-lifecycle: включает эндпоинты /-/reload и /-/quit для управления процессом.
  • --web.enable-admin-api: включает административные API (/api/v1/admin/tsdb/*), такие как очистка или удаление данных.
  • --debug.dump-blocks: выводит информацию о блоках TSDB при старте.

Пример запуска:

prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus \
--storage.tsdb.retention.time=90d \
--web.listen-address=0.0.0.0:9090 \
--log.level=info

Настройки TSDB (Time Series Database)

Prometheus использует собственную базу данных временных рядов, оптимизированную под высокую плотность записи и эффективное сжатие.

Блоки данных

Данные хранятся в виде блоков — неизменяемых директорий, каждая из которых содержит:

  • chunks/ — сырые данные метрик,
  • index — индекс по меткам и временным рядам,
  • meta.json — метаданные блока (временной диапазон, количество рядов и т.д.).

Блоки создаются каждые 2 часа. Старые блоки компактируются в более крупные (2h → 12h → 24h → ...), что ускоряет чтение.

WAL (Write-Ahead Log)

Все входящие образцы сначала записываются в WAL для обеспечения отказоустойчивости. При перезапуске Prometheus восстанавливает последние данные из WAL.

WAL хранится в поддиректории wal/ внутри tsdb.path.

Retention (срок хранения)

Поддерживается два режима:

  • По времени: --storage.tsdb.retention.time=30d
  • По объёму: --storage.tsdb.retention.size=100GB

Если указаны оба, применяется более строгий (тот, который раньше приведёт к удалению данных).

Важно: размер retention влияет на потребление RAM и диска. Каждый активный временной ряд занимает ~1–2 КБ в памяти.

Head block и memory series

Текущие (ещё не записанные в блок) данные хранятся в памяти в структуре Head. Число активных рядов напрямую влияет на использование оперативной памяти.

Метрика prometheus_tsdb_head_series показывает текущее число активных временных рядов.


Безопасность

Prometheus по умолчанию не включает аутентификацию или шифрование. Для продакшена требуется дополнительная настройка.

TLS и HTTP Basic Auth

Используется файл, указываемый через --web.config.file. Пример содержимого:

tls_server_config:
cert_file: /etc/prometheus/cert.pem
key_file: /etc/prometheus/key.pem

basic_auth_users:
admin: $2y$10$... # хеш bcrypt

Хеш пароля генерируется утилитой htpasswd или через promtool basic-auth hash-password.

Защита scrape-эндпоинтов

Целевые сервисы должны защищать свои /metrics:

  • Ограничивать доступ по IP или сети.
  • Использовать токены или Basic Auth.
  • Не выставлять чувствительные метрики (например, с персональными данными).

В scrape_configs можно указать учётные данные:

scrape_configs:
- job_name: "secure-app"
metrics_path: "/metrics"
scheme: "https"
basic_auth:
username: "monitor"
password: "secret"
static_configs:
- targets: ["app.example.com:8443"]

Административные API

Эндпоинты вроде /api/v1/admin/tsdb/delete_series позволяют удалять данные. Их следует отключать в продакшене или защищать строго.

Флаг --web.enable-admin-api включает эти функции.


Best Practices

Метрики

  • Используйте _total для counter’ов.
  • Избегайте высококардинальных меток (например, user_id, request_id) — они взрывают число временных рядов.
  • Не используйте динамические значения в метках без ограничения уникальных комбинаций.
  • Предпочитай histogram’ы summary’ам — они лучше агрегируются.

Конфигурация

  • Выносите правила в отдельные файлы и подключайте через rule_files.
  • Используйте relabel_configs для нормализации меток (например, приведение имён job’ов к единому виду).
  • Применяйте metric_relabel_configs для фильтрации ненужных метрик до записи в TSDB (экономия памяти и диска).

Пример фильтрации:

metric_relabel_configs:
- source_labels: [__name__]
regex: 'go_.*|process_.*'
action: drop

Производительность

  • Ограничьте число активных временных рядов (< 1 млн на один инстанс — рекомендуемый предел).
  • Используйте recording rules для предварительного агрегирования дорогих запросов.
  • Не делайте запросы с большим шагом (step) в Grafana — это создаёт нагрузку на CPU.
  • Настройте remote_write для долгосрочного хранения и масштабирования.

Мониторинг самого Prometheus

Prometheus экспортирует собственные метрики:

  • up{job="..."} — доступность целей.
  • prometheus_target_interval_length_seconds — реальный интервал сбора.
  • prometheus_rule_evaluation_duration_seconds — время выполнения правил.
  • prometheus_tsdb_wal_corruptions_total — ошибки WAL (должно быть 0).
  • rate(prometheus_http_requests_total[5m]) — нагрузка на HTTP API.

Рекомендуется мониторить эти метрики и настраивать алерты на аномалии.


Типичные ошибки

Counter reset

Counter может сбрасываться при перезапуске приложения. Используйте функцию rate() или increase(), которые корректно обрабатывают сбросы.

Неправильно:

http_requests_total

Правильно:

rate(http_requests_total[5m])

Использование irate() в графиках

irate() чувствителен к последним двум точкам и даёт «скачущие» графики. Используйте rate() для визуализации.

Группировка без by/without

Агрегация без указания меток приводит к потере контекста. Всегда указывайте, по каким меткам группировать.

Неправильный интервал в range vector

Интервал должен быть в 4–5 раз больше scrape_interval. Например, при scrape_interval=15s используйте [1m] или [2m].

Слишком короткий интервал ([15s]) может не содержать данных. Слишком длинный — теряет детализацию.

Отсутствие for в алертах

Без for алерт может «мигать» при кратковременных всплесках. Указывайте минимальную длительность состояния.


Функции PromQL

Prometheus предоставляет богатый набор встроенных функций, разделённых на категории. Ниже приведены все функции, доступные в актуальной версии (на момент 2026 года), с краткими пояснениями и примерами.

Функции для работы со временем

ФункцияОписаниеПример
time()Возвращает текущую метку времени Unix (в секундах).time() > 1700000000
timestamp(v instant-vector)Возвращает метку времени последней точки каждого ряда из вектора.timestamp(up)
day_of_month(v=vector(time()) instant-vector)День месяца (1–31).day_of_month()
day_of_week(v=vector(time()) instant-vector)День недели (0 — воскресенье, 6 — суббота).day_of_week()
days_in_month(v=vector(time()) instant-vector)Количество дней в текущем месяце.days_in_month()
hour(v=vector(time()) instant-vector)Час дня (0–23).hour()
minute(v=vector(time()) instant-vector)Минута часа (0–59).minute()
month(v=vector(time()) instant-vector)Месяц (1–12).month()
year(v=vector(time()) instant-vector)Год.year()

Все временные функции принимают необязательный аргумент — instant vector. Если он не указан, используется time().


Диапазонные функции (принимают range vector)

Эти функции работают только с диапазонными векторами, например metric[5m].

ФункцияОписаниеПример
avg_over_time(v range-vector)Среднее значение за интервал.avg_over_time(cpu_usage[10m])
min_over_time(v range-vector)Минимальное значение.min_over_time(temperature[1h])
max_over_time(v range-vector)Максимальное значение.max_over_time(request_duration[5m])
sum_over_time(v range-vector)Сумма значений.sum_over_time(bytes_sent[1h])
count_over_time(v range-vector)Количество точек.count_over_time(up[1d])
stddev_over_time(v range-vector)Стандартное отклонение.stddev_over_time(latency[10m])
stdvar_over_time(v range-vector)Дисперсия.stdvar_over_time(latency[10m])
last_over_time(v range-vector)Последнее значение в диапазоне.last_over_time(metric[5m])
present_over_time(v range-vector)Возвращает 1, если хотя бы одна точка существует.present_over_time(metric[1m])

Функции для counter’ов

ФункцияОписаниеПример
rate(v range-vector)Средняя скорость роста counter’а в секунду (автоматически обрабатывает сбросы).rate(http_requests_total[5m])
irate(v range-vector)Мгновенная скорость по двум последним точкам.irate(node_cpu_seconds_total[1m])
increase(v range-vector)Прирост counter’а за интервал. Эквивалентно rate() * интервал.increase(http_requests_total[1h])
resets(v range-vector)Количество сбросов counter’а.resets(process_start_time_seconds[1d])

Используйте rate() для графиков и алертов. irate() подходит только для отладки краткосрочных всплесков.


Функции для gauge’ов

ФункцияОписаниеПример
delta(v range-vector)Разница между последним и первым значением.delta(temperature[1h])
deriv(v range-vector)Производная (скорость изменения) временного ряда.deriv(cpu_usage[10m])
predict_linear(v range-vector, t scalar)Линейная экстраполяция значения через t секунд.predict_linear(disk_free_bytes[1h], 3600) < 0

Функции преобразования и округления

ФункцияОписаниеПример
abs(v instant-vector)Абсолютное значение.abs(error_rate)
ceil(v instant-vector)Округление вверх до целого.ceil(memory_usage_gb)
floor(v instant-vector)Округление вниз до целого.floor(load_avg)
round(v instant-vector, to_nearest=1 scalar)Округление до ближайшего кратного to_nearest.round(cpu_cores, 0.5)
exp(v instant-vector)Экспонента.exp(log_likelihood)
ln(v instant-vector)Натуральный логарифм.ln(request_count)
log2(v instant-vector)Логарифм по основанию 2.log2(file_size_bytes)
log10(v instant-vector)Десятичный логарифм.log10(population)
sqrt(v instant-vector)Квадратный корень.sqrt(variance)
pow(v instant-vector, y scalar)Возведение в степень.pow(signal, 2)
sgn(v instant-vector)Знак числа: -1, 0 или 1.sgn(net_flow)

Функции ограничения значений

ФункцияОписаниеПример
clamp(v instant-vector, min scalar, max scalar)Ограничивает значение в диапазоне [min, max].clamp(temperature, -50, 100)
clamp_min(v instant-vector, min scalar)Устанавливает нижнюю границу.clamp_min(latency, 0)
clamp_max(v instant-vector, max scalar)Устанавливает верхнюю границу.clamp_max(cpu_load, 100)

Функции для работы с метками

ФункцияОписаниеПример
label_join(v instant-vector, dst_label string, separator string, src_1 string, ..., src_n string)Объединяет значения указанных меток в новую метку.label_join(up, "instance_zone", "-", "instance", "zone")
label_replace(v instant-vector, dst_label string, replacement string, src_label string, regex string)Заменяет значение метки по регулярному выражению.label_replace(up, "job", "$1-prod", "job", "(.*)")

Прочие функции

ФункцияОписаниеПример
vector(s scalar)Преобразует скаляр в instant vector без меток.vector(1)
scalar(v instant-vector)Преобразует вектор в скаляр (если один элемент).scalar(count(up))
sort(v instant-vector)Сортирует по возрастанию.sort(instance_memory_usage)
sort_desc(v instant-vector)Сортирует по убыванию.sort_desc(request_rate)
changes(v range-vector)Количество изменений значения gauge’а.changes(process_open_fds[1h])
idelta(v range-vector)Разница между последними двумя точками.idelta(temperature[5m])

Интеграция с Grafana

Grafana — стандартная система визуализации для Prometheus.

Настройка источника данных

  1. В Grafana: Configuration → Data Sources → Add data source.
  2. Выбрать Prometheus.
  3. Указать URL (например, http://prometheus:9090).
  4. Нажать Save & test.

Типы панелей

  • Time series — основной график временных рядов.
  • Stat — отображение одного значения (например, текущая загрузка CPU).
  • Gauge — круговой измеритель.
  • Bar gauge — горизонтальные полосы.
  • Table — табличное представление.
  • Heatmap — тепловая карта (требует гистограмм).

Переменные (Variables)

Позволяют делать дашборды интерактивными:

  • $job, $instance, $region — выбираются из меток.
  • Запрос: label_values(up, job) — получает все уникальные значения метки job.

Пример использования в запросе:

rate(http_requests_total{job="$job"}[5m])

Расширение возможностей: Thanos, Cortex, VictoriaMetrics

Thanos

Добавляет долгосрочное хранение, глобальный запрос и высокую доступность.

Компоненты:

  • Sidecar — подключается к каждому Prometheus.
  • Store Gateway — читает данные из объектного хранилища (S3, GCS).
  • Query — объединяет данные из нескольких источников.
  • Compactor — управляет компактификацией и downsampling’ом.

Преимущества:

  • Хранение данных годами.
  • Единый запрос по всем кластерам.
  • Поддержка downsampling: 5m → 1h → 24h.

VictoriaMetrics

Альтернативная TSDB с лучшей производительностью и меньшим потреблением RAM.

Поддерживает:

  • Prometheus-совместимый API.
  • Встроенный vmagent как замена scrape’у.
  • Сжатие данных лучше, чем у Prometheus.

Cortex

Многоарендная (multi-tenant) система на основе Prometheus, ориентированная на SaaS.

Использует:

  • DynamoDB или Cassandra для индексов.
  • S3/GCS для блоков.
  • Memcached для кэширования.

Мониторинг самого Prometheus

Рекомендуется создать отдельный дашборд с ключевыми метриками:

  • up{job="prometheus"} — доступность.
  • prometheus_tsdb_head_series — число активных рядов.
  • prometheus_target_interval_length_seconds — реальный интервал сбора.
  • rate(prometheus_http_requests_total{handler=~"/api/v1/.*"}[5m]) — нагрузка на API.
  • prometheus_rule_group_last_duration_seconds — время выполнения правил.
  • prometheus_tsdb_wal_corruptions_total — ошибки WAL (должно быть 0).
  • prometheus_config_last_reload_successful — успешность последней перезагрузки конфигурации.

Алерты:

  • PrometheusTargetDown — если up == 0.
  • PrometheusErrorSendingSamplesToRemoteStorage — ошибки remote_write.
  • PrometheusTooManyActiveSeries — приближение к лимиту памяти.

Типовые шаблоны алертов

Доступность

- alert: TargetDown
expr: up == 0
for: 5m
labels:
severity: critical
annotations:
summary: "{{ $labels.job }}/{{ $labels.instance }} is down"

Высокая задержка

- alert: HighLatency
expr: histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m])) > 1
for: 10m
labels:
severity: warning
annotations:
summary: "95th percentile latency > 1s for {{ $labels.job }}"

Нехватка диска

- alert: DiskSpaceLow
expr: (node_filesystem_avail_bytes / node_filesystem_size_bytes) < 0.1
for: 15m
labels:
severity: warning
annotations:
summary: "Disk space low on {{ $labels.instance }}"

Сбой правила записи

- alert: RecordingRuleFailing
expr: prometheus_rule_evaluation_failures_total > 0
labels:
severity: critical
annotations:
summary: "Recording rule evaluation failed"